package main

import (
	"fmt"
	"math/rand"
	"time"
)

// BubbleSort 冒泡排序
func BubbleSort(arr []int) []int {
	fmt.Println("排序前：", arr)
	// 循环体
	for i := 0; i < len(arr)-1; i++ {
		//-i是为了节省内存
		for j := 0; j < len(arr)-1-i; j++ {
			// 倒序
			if (arr)[j] < (arr)[j+1] {
				// 交换
				(arr)[j], (arr)[j+1] = (arr)[j+1], (arr)[j]
			}
		}
	}
	fmt.Println("排序后：", arr)
	return arr
}

// MaxValueAndMaxIndex 求最大值
func MaxValueAndMaxIndex(arr []int) (int, int) {
	var maxValue int
	var maxIndex int
	for k, v := range arr {
		if maxValue < v {
			maxValue = v
			maxIndex = k
		}
	}
	return maxValue, maxIndex
}

// FindNum 查找特定值
func FindNum(arr []int, num int) bool {
	var isFind bool
	for _, v := range arr {
		if num == v {
			isFind = true
		}
	}
	return isFind
}

func main() {
	// 随机生成10个整数（1-100）保存到数组，并倒序打印以及求平均值、最大值和最大值的下标、
	// 并查找里面是否有55
	var sliceArr []int
	for i := 0; i < 10; i++ {
		// time.Now().Unix()返回一个从1970:1:1到现在所经过的秒数
		rand.Seed(time.Now().UnixNano())
		n := rand.Intn(100) + 1
		sliceArr = append(sliceArr, n)
		// 增加随机数混乱度
		time.Sleep(5)
		//if n == 20 {
		//	break
		//}
	}
	// 求最大值和最大值下标
	maxValue, maxIndex := MaxValueAndMaxIndex(sliceArr)
	// 倒序排序
	sliceArrReverse := BubbleSort(sliceArr)
	// 求平均值
	var count int
	for _, v := range sliceArr {
		count += v
	}
	average := float64(count) / float64(len(sliceArr))

	// 查找是否有55
	if FindNum(sliceArr, 55) {
		fmt.Println("找到了55")
	} else {
		fmt.Println("没有找到55")
	}
	fmt.Println("倒序排序===>", sliceArrReverse)
	fmt.Println("平均值===>", average)
	fmt.Println("最大值===>", maxValue, "最大值下标===>", maxIndex)
}
